package br.com.bmb.monitorimoveis.servico.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import br.com.bmb.monitorimoveis.entidade.Bairro;
import br.com.bmb.monitorimoveis.entidade.Cidade;
import br.com.bmb.monitorimoveis.persistencia.IAbstractDAO;
import br.com.bmb.monitorimoveis.persistencia.IBairroDAO;
import br.com.bmb.monitorimoveis.persistencia.ICidadeDAO;
import br.com.bmb.monitorimoveis.servico.IBairroService;
import br.com.bmb.monitorimoveis.servico.ICidadeService;

@Service
public class BairroService extends AbstractService<Bairro, Long> implements IBairroService {

	@Autowired
	private IBairroDAO dao;
	
	@Autowired
	private ICidadeService cidadeService;
	
	@Override
	@Transactional
	public Bairro inserir(Bairro bairro) {
		
		Cidade c = null;
		// cidade a que pertence o bairro não está cadastrada na base
		if ((c = cidadeService.getCidadeCadastrada(bairro.getCidade())) == null)
			cidadeService.inserir(bairro.getCidade());
		else
			bairro.setCidade(c);
		return dao.inserir(bairro);

	}


	@Transactional
	public List<Bairro> pesquisarPorNome(String nomeBairro) {
		return dao.pesquisarPorNome(nomeBairro);
	}

	@Transactional
	public List<Bairro> pesquisarPorNomeExbicao(String nomeBairroExibicao) {
		return dao.pesquisarPorNomeExbicao(nomeBairroExibicao);
	}

	@Transactional
	public List<Bairro> pesquisarPorCidade(Cidade cidade) {
		return dao.pesquisarPorCidade(cidade);
	}
	
	public Bairro getBairroCadastrado(Bairro bairro){
		List<Bairro> bairros = this.pesquisarPorNome(bairro.getNome());
		for (Bairro b : bairros)
			if (b.equals(bairro))				
				return b;					
		return null;
	}

	@Override
	protected IAbstractDAO<Bairro, Long> getDAO() {
		return dao;
	}
	
	

}
